const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const { resolve } = require("path");
module.exports = {
  // 1. 配置开发模式（开发模式 和 生产模式）
  mode: "development",

  // 2. 指定入口文件
  entry: path.join(__dirname, "../public/example.js"),

  // 3. 指定出口（打包、编译输出目录）文件
  output: {
    // dev模式下，编译的结果全部在内存中，所以无需指定clean参数，filename不写也行
    filename: "main.js",
    // 使用绝对路径时，注意当前webpack配置的文件的路径，以及dist的路径
    path: path.resolve(__dirname, "../dist"),
  },

  // 4. 模块加载器（属于webpack模块中的一员,模块有很多规则）
  module: {
    rules: [
      {
        // 使用babel转译es6语法和jsx
        test: /\.jsx?$/,
        loader: "babel-loader",
        exclude: /node_modules/,
      },
      {
        // 处理css样式文件
        test: /\.css$/,
        // loader只能指定一个，而use可以多个，且执行顺序是从下到上
        use: ["style-loader", "css-loader"],
      },
      {
        // 处理scss样式文件
        test: /\.(sa|sc)ss$/,
        // loader只能指定一个，而use可以多个，且执行顺序是从下到上
        use: ["style-loader", "css-loader", "sass-loader"],
      },
      {
        test: /\.less$/,
        use: [
          "style-loader",
          "css-loader",
          {
            loader: "less-loader",
            options: {
              lessOptions: {
                paths: [
                  path.resolve(__dirname, "../src"),
                  path.resolve(__dirname, "../node_modules/antd"),
                ],
                javascriptEnabled: true,
                // 主题变量注入
                modifyVars: {
                  "primary-color": "#FD8200",
                },
              },
            },
          },
        ],
      },
      {
        // 处理图片文件
        test: /\.(png|jpg|gif|jpeg)$/,
        type: "asset",
        parser: {
          dataUrlCondition: {
            // 图片大小小于40kb的才转换成base64格式
            // 优点：减少http请求数量，缺点：图片体积会更大
            // 因为chrome的并发数是6个
            maxSize: 40 * 1024,
          },
        },
        generator: {
          // 图片打包后的资源文件名，我们把他放到dist/static/images目录下
          // hash取8位，然后带上图片的后缀名，query是用来查询参数的
          filename: "static/images/[hash:10][ext][query]",
        },
      },
    ],
  },

  // 5. 插件（html插件、css分割插件、eslint代码检测插件等）
  plugins: [
    new HtmlWebpackPlugin({
      filename: "index.html",
      template: path.resolve(__dirname, "../public/index.html"),
    }),
  ],

  // 6. 开发服务器
  devServer: {
    port: 3020,
    hot: true, // 默认是开启HMR，热更新替换的
    open: true, // 默认是不开启打开浏览器的，这里需要打开
  },

  // 7. 解析模块配置
  resolve: {
    // 遇到js、jsx、ts、tsx文件，import引入时不需要添加后缀
    extensions: [".js", ".jsx", ".ts", ".tsx"],
  },

  devtool: "source-map",
};
